package Link

type LinkStack interface {
	IsEmpty() bool         // 是否为空
	Push(data interface{}) // 插入
	Pop() interface{}      // 弹出
	Length() int           // 长度
}

type Node struct {
	data  interface{}
	Pnext *Node
}

func NewStack() *Node {
	return &Node{}
}

func (n *Node) IsEmpty() bool {

	if n.Pnext == nil {
		return true
	} else {
		return false
	}

}

// 插入
func (n *Node) Push(data interface{}) {
	newData := &Node{data, nil}
	newData.Pnext = n.Pnext
	n.Pnext = newData
}

// 弹出
func (n *Node) Pop() interface{} {
	if n.IsEmpty() {
		return nil
	}

	data := n.Pnext.data
	n.Pnext = n.Pnext.Pnext
	return data
}

// 长度
func (n *Node) Length() int {
	temp := n
	length := 0
	for temp.Pnext != nil {
		temp = temp.Pnext //节点循环跳跃
		length++          //追加
	}
	return length //返回长度
}
